package Thread;
/**判断线程是否存活
 * 一：Java线程的生命周期包括以下几个阶段：
 * 1.New（新建）:
 * 当创建一个Thread对象但尚未调用start方法时，线程处于新建状态。
 * 2.Runnable（可运行）:
 * 调用start方法后，线程进入可运行状态。这意味着线程可以被调度执行，但并不意味着它立即开始运行。
 * 3.Running（运行中）:
 * 当线程被调度并开始执行run方法中的代码时，线程处于运行状态。
 * 4.Blocked（阻塞）:
 * 线程在某些情况下会被阻塞，例如等待锁、I/O操作完成等。
 * 5.Waiting（等待）:
 * 线程调用wait、join或park方法后进入等待状态，直到被其他线程唤醒。
 * 6.Timed Waiting（计时等待）:
 * 线程调用sleep、wait(long)、join(long)或parkNanos等方法后进入计时等待状态，等待特定的时间后自动恢复。
 * 7.Terminated（终止）:
 * 线程完成任务或因异常退出后进入终止状态。
 * 二：Thread对象的生命周期
 * Thread对象的生命周期是指Thread对象的整个生命周期，从创建到垃圾回收。Thread对象的生命周期可以独立于线程的生命周期存在，
 * 即使线程已经终止，Thread对象仍然可能存在，直到被垃圾回收器回收。
 * 总结：
 * 新建状态：Thread对象创建但未调用start方法。
 * 可运行状态：调用start方法后，线程进入可运行状态。
 * 运行中状态：线程被调度并开始执行run方法。
 * 阻塞/等待/计时等待状态：线程在某些条件下被阻塞或等待。
 * 终止状态：线程完成任务或因异常退出。
 * */
public class demo8 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            for (int i = 0; i < 3; i++) {
                System.out.println("hello thread");
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        // 没有调用start,结果是false
        System.out.println(t.isAlive());
        t.start();
        while(true) {
            System.out.println(t.isAlive());
            Thread.sleep(1000);
        }
        // false true true true false false... 线程结束但是Thread的生命周期还没有结束
    }
}
